<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>典型JavaScript面试题</title>
    <!--<script src="../js/jquery-1.7.1.js"></script>-->
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script type="text/javascript">
        /*
         * 作用域
         */
        (function () {
            var a = b = 5;
            console.log("自动执行函数吗？");
        })();
        console.log(b);

        /*
         * 如何扩展"内置"方法
         * 避免重写可能已经定义了的方法
         *      String.prototype.repeatify = String.prototype.repeatify || function(times) { code here... };
         */
        String.prototype.repeatify = String.prototype.repeatify || function (times) {
            var str = "";
            for (var i = 0; i < times; i++) {
                str += this;
            }
            return str;
        };
        console.log('hello'.repeatify(5));

        /*
         * Javascript中的this
         * 理由：JavaScript中关键字this所指代的函数上下文，取决于函数是怎样被调用的，而不是怎样被定义的
         */
        var fullname = "John Doe";
        var obj = {
            fullname: "Colin Ihrig",
            prop: {
                fullname: "Aurelio De Rosa",
                getFullName: function () {
                    return this.fullname;
                }
            }
        };
        //此处 getFullName() 被作为【obj.prop】对象调用。因此，当前的上下文指代后者，函数返回这个对对象的fullname属性。
        console.log(obj.prop.getFullName());

        //相反，当getFullname()被赋予【testobj】变量，当前的上下文指代全局对象window，这是因为test被隐式地作为全局对象的属性。
        var testobj = obj.prop.getFullName;
        console.log(testobj());

    </script>
</head>
<body>
</body>
</html>